package persistencia;

import java.util.ArrayList;
import java.util.List;

import unq.equipos.dom.FormacionStrategy;
import unq.equipos.dom.FormacionStrategyImpl;
import unq.equipos.dom.Posicion;
import unq.equipos.dom.Tecnico;

public class TecnicoBuilder {
	private FormacionStrategy formacionStrategy;
	private String nombre;
	
	public TecnicoBuilder withFormacionStrategy(FormacionStrategy formacionStrategy){
		this.setFormacionStrategy(formacionStrategy);
		return this;
	}
	
	public TecnicoBuilder withNombre(String nombre){
		this.setNombre(nombre);
		return this;
	}

	public Tecnico build(){
		Tecnico tecnico = new Tecnico(this.getNombre());
		tecnico.setFormacionStrategy(this.getFormacionStrategy());
		return tecnico;
	}
	
	
	public Tecnico premadeTecnico1(){
		List<Posicion> posiciones = new ArrayList<Posicion>();
		posiciones.add(Posicion.Arquero);
		posiciones.add(Posicion.Lateral);
		posiciones.add(Posicion.Lateral);
		posiciones.add(Posicion.Central);
		posiciones.add(Posicion.Central);
		posiciones.add(Posicion.VolanteDefensivo);
		posiciones.add(Posicion.VolanteLateral);
		posiciones.add(Posicion.VolanteLateral);
		posiciones.add(Posicion.Enganche);
		posiciones.add(Posicion.Delantero);
		posiciones.add(Posicion.MediaPunta);
		
		return new TecnicoBuilder().withFormacionStrategy(new FormacionStrategyImpl(posiciones)).
				withNombre("pepito").build();
	}
	
	
	public Tecnico premadeTecnico2(){
		List<Posicion> posiciones = new ArrayList<Posicion>();
		posiciones.add(Posicion.Arquero);
		posiciones.add(Posicion.Lateral);
		posiciones.add(Posicion.Lateral);
		posiciones.add(Posicion.Central);
		posiciones.add(Posicion.VolanteDefensivo);
		posiciones.add(Posicion.VolanteDefensivo);
		posiciones.add(Posicion.VolanteLateral);
		posiciones.add(Posicion.VolanteLateral);
		posiciones.add(Posicion.Enganche);
		posiciones.add(Posicion.Delantero);
		posiciones.add(Posicion.Delantero);
		
		return new TecnicoBuilder().withFormacionStrategy(new FormacionStrategyImpl(posiciones)).
				withNombre("fulanito").build();
	}
	
	public Tecnico premadeTecnico3() {
		List<Posicion> posiciones = new ArrayList<Posicion>();
		posiciones.add(Posicion.Arquero);
		posiciones.add(Posicion.Lateral);
		posiciones.add(Posicion.Lateral);
		posiciones.add(Posicion.Central);
		posiciones.add(Posicion.Central);
		posiciones.add(Posicion.VolanteDefensivo);
		posiciones.add(Posicion.VolanteDefensivo);
		posiciones.add(Posicion.VolanteLateral);
		posiciones.add(Posicion.Delantero);
		posiciones.add(Posicion.Delantero);
		posiciones.add(Posicion.MediaPunta);
		
		return new TecnicoBuilder().withFormacionStrategy(new FormacionStrategyImpl(posiciones)).
				withNombre("Cascarudo Pimenton").build();
	}
	
	public Tecnico premadeTecnico4() {
		List<Posicion> posiciones = new ArrayList<Posicion>();
		posiciones.add(Posicion.Arquero);
		posiciones.add(Posicion.Lateral);
		posiciones.add(Posicion.Lateral);
		posiciones.add(Posicion.Central);
		posiciones.add(Posicion.Central);
		posiciones.add(Posicion.VolanteDefensivo);
		posiciones.add(Posicion.VolanteLateral);
		posiciones.add(Posicion.VolanteLateral);
		posiciones.add(Posicion.Delantero);
		posiciones.add(Posicion.MediaPunta);
		posiciones.add(Posicion.MediaPunta);
		
		return new TecnicoBuilder().withFormacionStrategy(new FormacionStrategyImpl(posiciones)).
				withNombre("Tito").build();
	}
	
	//setters && getters
	public void setFormacionStrategy(FormacionStrategy formacionStrategy) {
		this.formacionStrategy = formacionStrategy;
	}

	public FormacionStrategy getFormacionStrategy() {
		return formacionStrategy;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getNombre() {
		return nombre;
	}

}
